package com.zyl.stream;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author zhaoyl
 * @date 2024/5/17 16:11
 * @description 说明
 * Stream是Java 8 API添加的一个新的抽象，称为流Stream，以一种声明性方式处理数据集合（侧重对于源数据计算能力的封装，
 * 并且支持序列与并行两种操作方式）
 * Stream流是从支持数据处理操作的源生成的元素序列，源可以是数组、文件、集合、函数。流不是集合元素，它不是数据结构并不保存数据，
 * 它的主要目的在于计算
 * Stream流是对集合（Collection）对象功能的增强，与Lambda表达式结合，可以提高编程效率、间接性和程序可读性。
 *
 *案例
 * 筛选用户:
 * 要求：ID是偶数，年龄必须大于22岁，用户名转为大写字母并倒序排列，只输出一个用户
 */
public class StreamDeno {

    public static void main(String[] args) {
        User u1 = new User(1,"zhansan",18);
        User u2 = new User(2,"lisi",23);
        User u3 = new User(3,"wangwu",19);
        User u4 = new User(4,"maliu",26);
        User u5 = new User(5,"zhaoqi",25);
        User u6 = new User(6,"liuba",24);
        List<User> list = Arrays.asList(u1,u2,u3,u4,u5);
        list.stream().filter(user -> {return user.getId()%2==0;})//过滤奇数
                    .filter(user -> {return user.getAge()>22;})//过滤小于22的
                    .map(user -> {return user.getName().toUpperCase();});//转为大写

        //  Comparator.reverseOrder();//表示 降序，没有处理属性的null值，排序时可能会空指针
        Comparator<User> comparator = Comparator.comparing(User::getName, Comparator.reverseOrder());//字母降序
        List<User> users = list.stream().sorted(comparator).collect(Collectors.toList());//排序后需要转为新的集合

        users.stream().limit(1)//查询第一条
                   .forEach(System.out::println);//打印

    }
}
